package logic;

import java.io.BufferedReader;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/** 
 * Clase encargada de crear un archivo binario donde se guarda el programa del usuario y encargado de abrirlo
 */

public class FileManager {

    /**
     * Escribe un archivo binario con el Objeto de clase Board serializado
     * @param String Path: ubicacion del fichero que se quiere escribir
     * @param Board pProgram: Objeto el cual se va a serializar
     */
    public static void escribeFichero(String fichero, Board pProgram)
    {
    	// agregar extension
    	fichero = fichero+".dat";
        try {
            ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream(fichero));
            oos.writeObject(pProgram);
            oos.close();
            // Se usa un ObjectOutputStream que no escriba una cabecera en el stream.
            MiObjectOutputStream myOutputStream = new MiObjectOutputStream( new FileOutputStream(fichero,true) );
            myOutputStream.writeUnshared(pProgram);
            myOutputStream.close();
        }catch (Exception e){
            e.printStackTrace();
        }

    }
    

    /**
     * Leer el archivo binario con el Objeto de clase Board serializado
     * @param String Path: ubicacion del fichero que se quiere escribir
     * @param Board pProgram: Objeto el cual se va a reconstruir a partir del archivo
     */
    public static Board leeFichero(String fichero)
    {
    	Object aux = null;
        try{
            // Se crea un ObjectInputStream
            ObjectInputStream ois = new ObjectInputStream( new FileInputStream(fichero) );
            // Se lee el primer objeto
           aux = ois.readObject();
            // Mientras haya objetos
            while (aux!=null){
                aux = ois.readObject();
            }
            ois.close();
        }
        catch (EOFException ex){
            System.out.println ("Fin de fichero");
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return (Board) aux;
    }
}
